package com.igeek;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author jerry
 * @Company 极客营
 */
public class JdkProxyFactory {
    private Object target;

    public JdkProxyFactory(Object target) {
        this.target = target;
    }

    public Object getProxyObject(){
        //参数1：目标对象的类加载器
        //参数2：目标对象实现的接口
        //参数3：回调方法对象
        return Proxy.newProxyInstance(target.getClass().getClassLoader(),
                target.getClass().getInterfaces(), new InvocationHandler() {
                    //当代理对象创建出来后，执行代理对象中的方法

                    //Method method 要执行的方法
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        if(method.getName().equals("save")){
                            writeLog();
                        }
                        //invoke 通过反射去执行方法
                        return  method.invoke(target,args);

                    }
                });
    }

    //记录日志
    private static void writeLog(){
        System.out.println("增强代码：写日志了。。。");
    }

}
